//
//  NSDate+Extension.swift
//  JKWeibo
//
//  Created by albert on 16/5/16.
//  Copyright © 2016年 albert. All rights reserved.
//  NSDate分类，处理微博时间显示

import UIKit

extension NSDate {
    //MARK: - 根据时间格式创建NSDate
    /** 根据时间格式创建NSDate */
    class func createDate(timeStr: String, formatterStr: String) -> NSDate {
        
        // 设置时间格式化对象
        let formatter = NSDateFormatter()
        formatter.dateFormat = formatterStr
        
        // 如果不指定以下代码，在真机中可能无法转换
        formatter.locale = NSLocale(localeIdentifier: "en")
        
        return formatter.dateFromString(timeStr)!
    }
    
    //MARK: - 根据调用者日期生成对应的日期字符串
    /** 根据调用者日期生成对应的日期字符串 */
    func descriptionStr() -> String {
        
        /**
         刚刚(一分钟内)
         X分钟前(一小时内)
         X小时前(当天)
         
         昨天 HH:mm(昨天)
         
         MM-dd HH:mm(一年内)
         yyyy-MM-dd HH:mm(更早期)
         */
         
        // 1.设置时间格式化对象
        let formatter = NSDateFormatter()
        
        // 如果不指定以下代码，在真机中可能无法转换
        formatter.locale = NSLocale(localeIdentifier: "en")
        
        // 2.创建一个日历类
        let calendar = NSCalendar.currentCalendar()
        
        // 3.定义变量记录时间格式
        var formatterStr = "HH:mm"
        
        // 4.比较两个时间之间的差值
        // 该方法直接比较时间，interval的结果就是相差多少秒
        //let interval = Int(NSDate().timeIntervalSinceDate(createDate))
        // 通过日历类比较时间
        let cmps  = calendar.components([NSCalendarUnit.Second, NSCalendarUnit.Minute, NSCalendarUnit.Hour, NSCalendarUnit.Day], fromDate: self, toDate: NSDate(), options: NSCalendarOptions(rawValue: 0))
        
        if calendar.isDateInToday(self){ // 今天
            
            if cmps.hour >= 1{ // 1小时以上
                return "\(cmps.hour)小时前"
                
            }else if cmps.minute >= 1{ // 1小时内，1分钟以上
                return "\(cmps.minute)分钟前"
                
            }else{ // 1分钟以内
                return "刚刚"
            }
        }else if calendar.isDateInYesterday(self) { // 昨天
            formatterStr = "昨天 " + formatterStr
            
        }else if calendar.isDateInThisYear(self) { // 今年之内
            formatterStr = "MM-dd " + formatterStr
            
        }else{ // 1年以上
            formatterStr = "yyyy-MM-dd " + formatterStr
        }
        
        // 抽出重复代码
        formatter.dateFormat = formatterStr
        return formatter.stringFromDate(self)
    }
}
